package com.example.lvsuo.Execl.Execldaochu;

import org.apache.poi.xssf.usermodel.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class ExeclController {
    //Execl的导出
    @Autowired
ExeclService  es;




    @RequestMapping("/testExprotExcelx/{BIAOMING}")
    public String  testExprotExcelx(HttpServletResponse response , @PathVariable("BIAOMING") String BIAOMING ){
        try {
            //创建一个数组用于设置表头
            List<String> header =new ArrayList<>();
          List<Map<String,Object>>  li= es.ziduanANDzhushi(BIAOMING);
            for (int i = 0; i <li.size() ; i++) {
                   header.add(li.get(i).get("views").toString());
            }
            //      //创建一个数组用于设置 表字段
            List<String> ziduan =new ArrayList<>();
            //            //获取字段和注释
            for (int i = 0; i <li.size() ; i++) {
                ziduan.add(li.get(i).get("zds").toString());
            }
            //打印表注释   表头
            //存放导出到execl的数据
            List<Map<String,String>> list=new ArrayList<>();
                  //根据表名去找数据
            List<Map<String,Object>>  shuju=   es.ZHAOSHUJU(BIAOMING);
            for (int i = 0; i <shuju.size() ; i++) {
                Map<String ,String> map=new HashMap<>();
                for (int j = 0; j <header.size() ; j++) {
                    //空则给 字符串 null
                    if(shuju.get(i).get(ziduan.get(j))==null) {
                    map.put(header.get(j), "null");
                    continue;}
                   /* 表注释长度和表字段长度绝对相同 对应关系也相同
                    map里面放 参1 表注释  参2 第一个对象.get(  表字段(不能写死 又因为循环了注释 注释和表字段长度相同
                     当获取第一个注释的时候 获取第一个对象的第一个字段数据)  )*/
                   map.put(header.get(j), shuju.get(i).get(ziduan.get(j)).toString());
                }
                list.add(map);
            }


            //声明一个工作簿
            XSSFWorkbook workbook = new XSSFWorkbook();
            //生成一个表格，设置表格名称为"每日库存情况表"
            XSSFSheet sheet = workbook.createSheet("每日情况表");
            //设置表格列宽度为15个字节
            sheet.setDefaultColumnWidth(15);
            //创建第一行表头
            XSSFRow headrow = sheet.createRow(0);
            //遍历添加表头
            for (int i = 0; i < header.size(); i++) {
                //创建一个单元格
                XSSFCell cell = headrow.createCell(i);
                //创建一个内容对象
                XSSFRichTextString text = new XSSFRichTextString(header.get(i));
                //将内容对象的文字内容写入到单元格中
                cell.setCellValue(text);
            }
            //模拟遍历结果集，把内容加入表格
            for (int i = 0; i < list.size(); i++) {
                XSSFRow row1 = sheet.createRow(i+1);
                for (int j=0;j<header.size();j++){
                    XSSFCell cell = row1.createCell(j);
                    XSSFRichTextString text = new XSSFRichTextString(list.get(i).get(header.get(j))+"");
                    cell.setCellValue(text);
                }
            }

            //准备将Excel的输出流通过response输出到页面下载
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment;filename=student.xlsx");
            //刷新缓冲
            response.flushBuffer();
            //workbook将Excel写入到response的输出流中，供页面下载
            workbook.write(response.getOutputStream());
            return "导出成功";
        } catch (Exception e) {
            e.printStackTrace();
            return "导出失败";
        }

    }


}
